// *************************
// 任务：
// 屏蔽2号信号 kill或键盘发送2号信号，所以
// 2号信号不会送达，2号信号一直宿舍，一直pending
// 使用sigpending获取pending信号集合
#include<stdio.h>
#include<unistd.h>
#include<signal.h>
#include<stdlib.h>

void handler(int signo)
{
  printf("catch a signal : %d\n", signo);
}

void printPengding(sigset_t *pending)
{
  int i = 1;
  for(; i<=31; i++){
  //for(int i = 1; i<=31; i++){
    if(sigismember(pending, i))
    {
      printf("1 ");
    }
    else{
      printf("0 ");
    }
  }
  printf("\n");
}
int main()
{
  signal(2, handler); 
  //sigset_t s;
  sigset_t set, oset; //定义信号集对象
  sigemptyset(&set);  //清空初始化
  sigemptyset(&oset); //清空初始化

  sigaddset(&set, 2); //SIGINT
  sigprocmask(SIG_SETMASK, &set, &oset);//阻塞2号信号
  sigset_t pending;
  int count = 0;
  while(1){
    sigemptyset(&pending);
    sigpending(&pending);
    printPengding(&pending);
    sleep(1);
    count++;
    if(count == 10){
      sigprocmask(SIG_SETMASK, &oset, NULL);//恢复曾经信号屏蔽字
      printf("恢复信号屏蔽字\n");
    }
  }
  //sigfillset(&s);

  //sigaddset(&s, SIGINT);

  return 0;
}
